Tipos de datos específicos

Encuentro 2

Tipos de datos


Los tipos de datos en lenguaje R se reconocen por:

int (integer): números enteros

num o dbl (numeric): números reales

chr (character): caracteres (texto)

logi o lgl (logical): valores lógicos

Date: fechas

dttm (date-time): fechas y horas

fct (factor): factores

Coerciones


Existen funciones de R base que permiten comprobar y coercionar los tipos de datos.

Tipo Comprobación Coerción
character is.character() as.character()
numeric is.numeric() as.numeric()
integer is.integer() as.integer()
double is.double() as.double()
factor is.factor() as.factor()
logical is.logical() as.logical()
NA is.na() as.na()

Las coerciones, en ocasiones, provocan que se asignen valores NA porque no son posibles de realizar.

Ejemplo: puedo coercionar un múmero a caracter pero no puedo hacer lo inverso.

Variables de tiempo


  • Las variables de tiempo pueden estar expresadas en diferentes unidades y formatos (fecha, hora, dia, mes, año, etc…). Dependerá de la tabla de datos, el tipo de estudio, etc.

  • Las fechas y las horas son complicadas porque tienen que reconciliar dos fenómenos físicos (la rotación de la Tierra y su órbita alrededor del sol), con todo un conjunto de fenómenos geopolíticos que incluyen: formatos distintos (dd/mm/aaaa - mm/dd/aaaa), husos horarios y horarios de verano (en algunas ocasiones y países).


  • Para pensar lo complejo del asunto contestemos estas preguntas:
    • ¿Todos los años tienen 365 días?
    • ¿Todos los días tienen 24 horas?
    • ¿Cada minuto tiene 60 segundos?

Sistemas de fechas


Las variables de tiempo nos obliga a gestionar tipos de datos fecha y hora, así como también intervalos entre esos instantes.

Coexisten 2 clases de objetos básicos en el lenguaje R

POSIX (acrónimo de Portable Operating System Interface, y X viene de UNIX como seña de identidad de la API) es una norma escrita por la IEEE, que define una interfaz estándar del sistema operativo y el entorno. Los objetos fecha-hora se denominan formalmente tipos POSIXt, POSIXct, o POSIXlt (la diferencia no es relevante)

Gestión de datos de tiempo


Convertir a formato Date o POSIX


Extraer componentes (día, año, mes, semana, nombre del día, etc)


Trabajar con lapsos de tiempo (intervalos, duraciones y períodos)


Operaciones y cálculos con variables de tiempo

Definiciones


  • Un date es un día almacenado como el número de días desde el 01/01/1970 (si es anterior los números son negativos)
library(tidyverse)


as_date(19881)
[1] "2024-06-07"
as_date(-1)
[1] "1969-12-31"


  • Un datetime es un punto en el tiempo, almacenado como el número de segundos desde el 01/01/1970 00:00:00 UTC
as_datetime(1717718401)
[1] "2024-06-07 00:00:01 UTC"

Paquete lubridate

lubridate


  • Convierte cadenas en fechas
dmy("07/06/2024")
[1] "2024-06-07"
dmy("07/06/2024") |> class()
[1] "Date"
dmy_h("07/06/2024 09")
[1] "2024-06-07 09:00:00 UTC"
  • Extrae partes de una fecha
hoy <- dmy("07/06/2024")
hoy
[1] "2024-06-07"
# extraemos el año

year(hoy)
[1] 2024
# extraemos la semana epidemiológica

epiweek(hoy)
[1] 23

Lapsos de tiempo


Un año trópico dura 365 días 5 hs 48 min 45,10 s (365,242189 días), por lo que se produce un desfasaje con respecto a nuestro año calendario.

Para realizar operaciones con fechas y date-times sorteando estas dificultades, lubridate ofrece tres tipos de lapsos:


  • Intervalos: lapso de tiempo que ocurre entre dos instantes específicos.

  • Duraciones: lapso de tiempo medidos en segundos exactos (máxima unidad temporal con una longitud consistente).

  • Períodos: intervalo de tiempo en unidades “humanas” mayores que segundos (minutos, días, meses, etc)

Operaciones de tiempo

Calculo de tiempo entre dos fechas


fecha1 <- dmy("26/05/1973")
fecha2 <- dmy("07/06/2024")

# creamos un intervalo entre las dos fechas
intervalo <- interval(start = fecha1, 
                      end = fecha2)
intervalo
[1] 1973-05-26 UTC--2024-06-07 UTC
# el intervalo puede ser divido por 
# duraciones que tienen unidades diferentes
# Las duraciones comienzan con d
# ejemplo: dyears()
intervalo / dyears(1) # años
[1] 51.03354
intervalo %/% dyears(1) # solo enteros
[1] 51
intervalo / ddays()
[1] 18640
18640 / 365.25 # calculo de años
[1] 51.03354

Cadenas de caracteres (texto)


  • Para el lenguaje R, todo caracter que se encuentre entre comillas es una cadena de caracteres (en inglés llamada “string”).

  • Las cadenas de caracteres pueden contener letras (“a”), números (“1”) y símbolos (“&”) o una combinación de todos ellos.

Ejemplos de datos tipo cadena regular:

Valores ejemplo Descripción
B188 Códigos CIE10
C34.9 Topografía CIE-O
9061/6 Morfología CIE-O
GAT-AAU-ATC-GAA Secuencia ADN
7600XAD Códigos postales

Paquete stringr





El paquete stringr se instala y activa cuando ejecutamos library(tidyverse).


  • Contiene una familia de funciones diseñadas para trabajar con cadenas de caracteres.



  • Sus funciones comienzan con el prefijo str_

Algunas de sus funciones comunes


str_lengtht(): devuelve longitud de cadena

str_sub(): extrae o reemplaza caracteres por posición

str_to_upper(): convierte a mayúsculas

str_to_lower(): convierte a minúsculas

str_trim(): elimina espacios en blanco

str_pad(): agrega espacios en blanco u otros caracteres

str_glue(): une cadenas de caracteres

Expresiones regulares


Una expresión regular es una cadena de texto especial para describir un patrón de búsqueda que se puede utilizar generalmente para:

  • localizar cadenas de caracteres (ubicar - filtrar)
  • extraer una porción de los datos (extraer)
  • modificar los datos localizados (reemplazar)

Una expresión regular habitualmente se construye concatenando la especificación de caracteres secuenciados.

Operaciones y funciones que permiten expresiones regulares


  • Detectar patrones str_detect(): Devuelve vector lógico

  • Filtrar patrones str_subset(): Devuelve coincidencia en patrón

  • Extraer patrones str_extract(): Extrae coincidencias

  • Localizar patrones str_locate(): Localiza comienzo y final del patrón

  • Reemplazar patrones str_replace(): Reemplaza por otra cadena

Expresiones regulares

Símbolos y metacaracteres Descripción
^ Inicio de la cadena
$ Final de la cadena
[ ] Cualquier carácter del conjunto entre paréntesis
[^] Cualquier carácter no incluido en el conjunto
? Cero o una ocurrencia de lo que precede al símbolo
+ El caracter que le precede debe aparecer al menos una vez
* El caracter que le precede debe aparecer cero, una o más veces
{x} x ocurrencias del caracter que lo precede
{x,z} Entre x y z ocurrencias del caracter que lo precede
{x,} x o más ocurrencias de lo que lo precede

Expresiones regulares

Símbolos y metacaracteres Descripción
| Une subexpresiones
. Concuerda con cualquier carácter individual
( ) Agrupa subexpresiones
0-9 a-z A-Z Rangos de números, letras…
\ Marca el carácter siguiente como un carácter especial
\. Representa un punto dentro del patrón
\s Representa un espacio en blanco dentro del patrón
\n Representa un salto de línea dentro del patrón
\d Representa un dígito numérico dentro del patrón
\w Representa un carácter alfanumérico dentro del patrón

Expresiones regulares


Algunos ejemplos sencillos:


^[ML][0-9]$

Cadenas que comiencen con M o L y finalicen con algún número entre 0 y 9

4{3}

Cadenas que contengan tres números 4 repetidos continuos

^E\\d

Cadenas que comiencen con E y continúen con un número cualquiera

[A-z]$

Cadenas que finaliza con alguna letra mayúscula o minúscula

Factores en R



  • Los factores son el formato de datos que el lenguaje R reserva para trabajar con variables categóricas, es decir, variables que tienen un conjunto fijo y conocido de valores posibles (categorías cerradas).


  • Están compuesto por valores numéricos internos asociados a etiquetas que definen cada uno de los niveles (categorías de la variable).


  • Son necesarios, por ejemplo, cuando necesitamos mostrar variables de caracteres en un orden específico (no alfabético).

Paquete forcats





  • El paquete forcats proporciona un conjunto de herramientas útiles que resuelven problemas comunes con factores en R.


  • Respeta los principios del tidyverse


  • Todas sus funciones comienzan con el prefijo fct_

Funciones mas relevantes


fct_recode(): recodifica niveles

fct_relevel(): reordena niveles

fct_expand(): agrega nuevos niveles

fct_drop(): elimina niveles no utilizados

fct_rev(): revierte orden de los niveles

fct_unique(): muestra valores únicos del factor

Funciones mas relevantes


fct_infreq(): ordena niveles por frecuencia

fct_explicit_na(): explicita valores NA (agrega etiqueta al nivel)

fct_other(): unifica niveles concretos en “otros”

fct_lump(): unifica niveles menos frecuentes absolutos en “otros”

fct_lump_prop(): unifica niveles menos frecuentes porcentuales en “otros”

Manejo de NA’s con naniar





El paquete naniar es otro paquete que reúne funciones para el manejo de valores faltantes (NA en R).


  • Proporciona funciones analíticas y visuales de detección y gestión

  • Es compatible con el mundo “tidy” de tidyverse

  • Posibilita el trabajo de imputación (no lo trataremos en el curso)

Paquete naniar


De las muchas funciones que tiene el paquete seleccionamos algunas para mostrar que son muy útiles para nuestra tarea habitual.

miss_var_summary(): proporciona un resumen sobre los valores NA en cada variable del dataframe

gg_miss_upset(): genera un gráfico Upset sobre los valores NA de dataframe

replace_with_na(): reemplaza valores específicos con valores NA

replace_na_with(): reemplaza valores NA con valores específicos

Ejemplo de un UpSet de valores perdidos